Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2019-ICML-[PUbN] Classification from Positive, Unlabeled and Biased Negative Data

論文のリンク

論文ほんへんリンク(Appendixあり)

Introduction

PU Learningは文書分類、外れ値検束、医療診断、時系列分類などで使われてきた。

この論文ではPNU+Importance Weightingをしている。出現頻度が低いUnlabeledのデータの重みを大きくしてる感じ。

この論文での貢献

  1. PU biased N Learningの定式化を行い、性能を実験で確認して理論的にも下界評価した。
  2. Negativeのデータはbiasedとはいえ、使った方が純粋なPUよりも性能が上がった。
  3. この手法はPUbNだけではなく、純粋なPUにも還元できるし、性能もトップクラスだった。

Relation with Semi-supervised Learning

PNUの全てがそろっているときに適用できる自己教師学習と似ている。しかし、この研究ではrisk estimatorを減らしているし、そもそもNのデータはbiasedで少量しかないことが前提。その上、Unlabeledは学習の上で重みを付けて、risk estimatorの最小化という扱いだ。

だが、自己教師学習はUnlabeledの大量のデータを使って学習過程のモデルの安定性や一般化能力を高める正則化?をするという意味で、目指すものが違う。

Relation with Data Shift

訓練しているデータの分布が違う分野に移す転移学習?と似ている。というか、bNからUへ転移学習しているともいえる。共変量シフトもそうだよね。

また、ソースが複数の分布から生じるとして、trainとtestでその構成比が異なる場合でも訓練=Source Component Shiftとも関係があると言える。この研究もこれに属すると言えるが、そもそもこの分野には一般的な手法がないのでどうしようもない。

Problem Setting

基本的な文字の定義は x\mathbf{x}はデータ、 y{1,+1}y \in \lbrace -1, +1 \rbraceはground truthの属性である。損失関数 llは正の値なら基本的に0で負の値なら大きくなる。

Positive Negative Learning

学習器 g(x)g(\mathbf{x})で上手く yyを予測したい。以下の分類リスクを最小化したい。

R(g)=Ex,y[l(yg(x))]R(g) = \mathbb{E} _{\mathbf{x}, y} [ l(y g(\mathbf{x})) ]

01損失が一番理想的であるが傾きがなので、代理損失を一般的に使うことになる。代わりは以下のようなものが多い。

sigmoidloss  l(x)=11+exlogisticloss  l(x)=log(1+ex)\mathrm{sigmoid loss} \; l(x) = \frac{1}{1 + e ^ x} \\ \mathrm{logistic loss} \; l(x) = \log (1 + e ^ {-x})

訓練データはすべてラベルが明確についており、最小化するのは偽陽性(negativeなのにpositiveにされる)と偽陰性(positiveなのにnegativeにされる)の、クラス事前確率(与えられている) π=p(y=+1)\pi = p(y=+1)を乗じたものである。(リスクは01損失を使った時は偽陰性、偽陽性の確率とみなせるので書き換えは自然)

R(g)=πE(x,y)XP[l(g(x))]+(1π)E(x,y)XN[l(g(x))]R(g)= \pi \mathbb{E} _{(\mathbf{x}, y) \in X _P} [ l(g(\mathbf{x})) ] + (1 - \pi) \mathbb{E} _{(\mathbf{x}, y) \in X _N} [ l(-g(\mathbf{x})) ]

Positive Unlabeled Learning

Negativeデータないので、Unlabeledでやるしかない。ad hocなやり方が多いが、duPlessisのcost-sensitiveの方法[nPU]だと以下の式を使って最適化をする。

Exp(x)[l(g(x))]=πEp(xp(x,+1))[l(g(x))]+(1π)Ep(xp(x,1))[l(g(x))]\mathbb{E} _{\mathbf{x} \sim p(\mathbf{x})} [ l(-g(\mathbf{x})) ] = \pi \mathbb{E} _{p(\mathbf{x} \in p(\mathbf{x}, +1))} [l(-g(\mathbf{x}))] + (1 - \pi) \mathbb{E} _{p(\mathbf{x} \in p(\mathbf{x}, -1))} [l(-g(\mathbf{x}))]

これを使って変形すると、以下のリスク関数を最小化する。

R(g)=π(Exp(x,+1)[l(g(x))l(g(x))])+Exp(x)[l(g(x))]R(g) = \pi(\mathbb{E} _{\mathbf{x} \in p(\mathbf{x}, +1)} [ l(g(\mathbf{x})) - l(-g(\mathbf{x})) ]) + \mathbb{E} _{\mathbf{x} \in p(\mathbf{x})} [l(-g(\mathbf{x}))]

ここで、対称ロスなどで改善できたりするという話がある。

このなかで、DNNなどの表現力が高すぎるモデルだと過学習して R(g)R(g)がマイナスに行くので、Kiryo2017[nnPU]で提案されるのは、以下の改良されたリスク関数を最小化する。

R(g)=πExp(x,1)[l(g(x))]+max(0,Exp(x)[l(g(x))],πExp(x,1)[l(g(x))])R(g) = \pi \mathbb{E} _{\mathbf{x} \sim p(\mathbf{x}, 1)}[l(g(\mathbf{x}))] + \max(0, \mathbb{E} _{\mathbf{x} \sim p(\mathbf{x})} [l(-g(\mathbf{x}))], - \pi \mathbb{E} _{\mathbf{x} \sim p(\mathbf{x}, 1)}[l(-g(\mathbf{x}))])

実装上、 max\maxの項の中である閾値より小さくなったときに、過学習を防ぐために、勾配上昇法といって、勾配降下法とは別に逆に勾配の向きで大きくなるように頑張って登ったりもする。

Positive Negative Unlabeled Learning

📄Arrow icon of a page link2017-ICML-[PNU]Semi-Supervised Classification Based on Classification from Positive and Unlabeled Data で提案されたPNU Learningという手法がある。PNU Learningのリスクは、PNとPU or NUの適宜な割合 γ\gammaでの混合比で混ぜたものである

原文に誤植あり。この式のR(g)の1項目にπがない。

Image in a image block

この論文も結局この式をうまく計算して最小化させる形になる。

Positive Unlabeled biased Negative Learning

PUの仮定通りと似ているが、ラベルがつくかどうかの s{1,+1}s \in \lbrace -1, +1 \rbraceとして、以下のことが前提として成り立つ。

x,p(s=+1x,y=+1)=1x,p(y=1x,s=1)=1\forall \mathbf{x}, p(s=+1|\mathbf{x}, y=+1)=1 \\ \forall \mathbf{x}, p(y=-1|\mathbf{x},s=-1)=1

この ssは一部のNegativeサンプルに対して、ラベルが付いていることを指し示す潜在変数。

  1. 一番上は、PositiveのGround-truthを持つサンプルについて、サンプルx\mathbf{x}次第でPとしてラベルがつくかどうかが決まるという意味
  2. 二番目は、ラベルがつかないサンプルについて、サンプルx\mathbf{x}次第でNegativeであるかどうかがわかるという意味。

例として、文書分類を考える。Negativeに相当するのはNN個のカテゴリがあるとき、ラベル付けされるのはそのうちのMMカテゴリで、M<NM < Nである。なので、ラベル付けされたNegativeは、Negativeの全体の分布からずれている、Biased Negativeということ。

ρ=p(y=1,s=+1)\rho = p(y=-1,s=+1)ground truthがNなのに、ラベル付けされる確率(そのようにラベル付けされたNegativeはbiased Negative)を置く。

π,ρ\pi, \rhoはいずれもうまいこと推定してから事前確率として扱うのが多い。よってbiased Negativeは事前条件 ρ=p(y=1,s=+1)\rho = p(y=-1,s=+1)の下で、以下のように、集めている。

Image in a image block

この考え自体、ラベル付けに誤りがあると考えるNoisy Labelと似ている?同じラベルついていると扱われているのにNegativeである、とも考えられる。

Method

この式の意味は、

  • 確率 π=p(y=+1)\pi = p(y=+1)を重みとして、Ground-truthがPositiveであるデータ全てに対しての損失を加える。
  • 確率 ρ=p(y=1,s=+1)\rho=p(y=-1,s=+1)を重みとして、 s=+1s=+1としてラベルが付いてるが 、Ground-TruthがNegativeのデータ全てに対しての損失を加える。
  • 確率 1πρ=p(s=1,y=1)1 - \pi - \rho = p(s=-1, y=-1)を重みとして、ラベル付けされてないすべてのGround-TruthがNegativeのデータ全てに対しての損失を加える。

このうち、以下のように前の2項は計算で得ることができる。これはデータとしては、Positiveとbiased Nとして使われる。

EP[l(g(x))]1nPi=1nPl(g(xiP))Exy=1,s=+1[l(g(x))]1nbNi=1nbNl(g(xibN)) \mathbb{E} _{P}[l(g(\mathbf{x}))] \approx \frac{1}{n_P} \sum_{i=1}^{n_P} l(g(\mathbf{x}_i ^ P)) \\ \mathbb{E}_{\mathbf{x} | y=-1,s=+1}[l(-g(\mathbf{x}))] \approx \frac{1}{n _{bN}} \sum_{i=1} ^ {n_{bN}} l(-g(\mathbf{x}_i^{bN}))

この式で予測しているからには、Positiveの選択には選択バイアスがないことを前提にしている

となると、 Exy=1,s=1[l(g(x))]\mathbb{E}_{\mathbf{x}|y=-1,s=-1}[l(-g(\mathbf{x}))]どのように推計するんか?という問題になる。

σ(x)=p(s=+1x)η[0,1]h:Rd[0,1]h(x)>ησ(x)>0\sigma(\mathbf{x}) = p(s=+1|\mathbf{x})\\ \forall \eta \in [0,1] \\ h : \mathbb{R} ^ d \to [0,1] \cap h(\mathbf{x}) > \eta \Rightarrow \sigma(\mathbf{x}) > 0

あるデータを受け取り、 [0,1][0,1]へ写す hhがあるとして(これは識別器ではない)、それがどんな閾値 η\etaでも、それを超えるのならば、 σ(x)=p(s=+1x)>0\sigma(\mathbf{x})=p(s=+1|\mathbf{x})>0が成り立つという前提条件を考える。この時、以下のような証明1で式変形できる。( σ(x)\sigma(\mathbf{x})はpropensity scoreともいえる)

どんなη\etaでも、h(x)>ηh(\mathbf{x})>\etaが満たされるなら、σ(x)=0\sigma(\mathbf{x})=0ではない=ラベルがつきうるので損失関数の計算に含める必要があるという前提をとる、ということ。

この時、以下が成り立つ。

Image in a image block

証明1についての説明
Image in a image block

まずは指示関数で h(x)h(\mathbf{x})η\etaの大小に比べてと切り分ける。

そして、 h(x)ηh(\mathbf{x}) \leq \etaの部分では上下に p(x)p(\mathbf{x})をかけ、 h(x)>ηh(\mathbf{x}) > \etaの部分では上下に p(x,s=+1)p(\mathbf{x},s=+1)をかけた。

さらに、 σ(x)=p(s=+1x)\sigma(\mathbf{x}) = p(s=+1|\mathbf{x})で書き直せる部分を書きなおすと、 p(x),p(x,s=+1)p(\mathbf{x}), p(\mathbf{x}, s=+1)についての期待値に分割できる。前半はそのまま使えるが、後半に関しては、

p(x,s=+1)=p(x,s=+1,y=+1)+p(x,s=+1,y=1)=p(y=+1)p(x,s=+1y=+1)+p(y=1,s=+1)p(xy=1,s=+1)=p(y=+1)p(xy=+1)+p(y=1,s=+1)p(xy=1,s=+1)=πp(xy=+1)+ρp(xy=1,s=+1)p(\mathbf{x}, s=+1) = p(\mathbf{x},s=+1,y=+1)+p(\mathbf{x},s=+1,y=-1)\\ =p(y=+1)p(\mathbf{x},s=+1|y=+1)+p(y=-1,s=+1)p(\mathbf{x}|y=-1,s=+1)\\ =p(y=+1)p(\mathbf{x}|y=+1)+p(y=-1,s=+1)p(\mathbf{x}|y=-1,s=+1)\\ =\pi p(\mathbf{x}|y=+1)+\rho p(\mathbf{x}|y=-1,s=+1)

となる。ここでは、PU Learningの前提である p(s=+1x,y=+1)=1p(s=+1|\mathbf{x},y=+1)=1を使って1項目を式変形した。

このように、既知で計算できる期待値に落とし込んでいる

上の式のように、既知の期待値に落とし込んでいるη\eta以下の h(x)h(\mathbf{x})を取るなら、 x\mathbf{x}ラベルが決してつかないという形。また、↑の式は実際に訓練するときすべてのPositive, Negative, Unlabeledを使うのではなく、オリジナルに考えた h,ηh, \etaという関数や値で条件に満たすものだけを使うという形

理想的には、 hhσ\sigmaとほぼ同じ関数であることらしい。この時、 h(x)h(\mathbf{x})が1に近ければ σ(x)\sigma(\mathbf{x})も1にほぼ近くなり、ほぼ確実にラベルがつく、ということになる。そうすれば、上の式の第2,3項目に集計される。逆に h(x)h(\mathbf{x})が小さいときには第1項目に集計される感じ。

この η\etaは重要なハイパーパラメタである。大きいほど、Unlabeledについて重きを置くということになる。

既存の手法はrisk functionをUだけで推定していたが、重みを軽くしてもUが多すぎてNegativeに偏ってしまう、cost-sensitive特有の予測がマイナスに偏る問題(Minibatch内でPositiveがないようなMinibatchが出てくるみたいな)があった。

これについて、データをあえて一部は使わないという大胆な発想で回避するスキームが確かに考えられる。

実装するには

実用上、 σ(x)\sigma(\mathbf{x})は推定された σ^(x)\hat{\sigma}(\mathbf{x})となり、これを h(x)h(\mathbf{x})とする。(これまじでいいの?) また、上手く η\etaを選ぶことも重要。

η\etaの選び方

直接推計するのが難しいので、中間変数 τ\tauを新たに置いて、以下のようだと仮定する。推計が難しいからこそ、下記条件を満たすものの個数を τ\tauを使って推定する(1πρ)nU(1-\pi-\rho)n_Uとなっているのは、以下の定義の部分で今推計してる部分が 1πρ1-\pi-\rhoの重みであるから。

Opinion: 二分探索とかで推定できない?

{xXUσ^(x)η}の個数=floor(τ(1πρ)nU)\lbrace \mathbf{x} \in X _U | \hat{\sigma}(\mathbf{x}) \leq \eta \rbrace の個数 = \mathrm{floor}(\tau(1 - \pi - \rho) n_U)

高精度の σ^\hat{\sigma}があるときは、 τ\tauを大きくして(Unlabeledを多く取り込んで)計算する。そうでない σ^\hat{\sigma}が正確に推定できない場合は、 τ\tauは小さくして(Unlabeledを少なく使いながら)計算する。

σ^\hat{\sigma}の推計方法

PositiveとBiased NegativeをPositiveと見なして、UnlabeledをそのままとしてuuPUをすれば、疑似的に σ^(x)\hat{\sigma}(\mathbf{x})が得られる。

ただし、計算はこれに限る必要はなく、密度比推定(Kanamori 2009)などのようにでもOK。

なお、appendix Cにあるように、以下の式で σ^\hat{\sigma}を最小化しても良い。

Image in a image block
具体的な実装
Image in a image block

シャッフルしてmini batchでやる。DNNでのやり方として普通のやり方。

性能の理論的評価

Appendixに詳細にある。risk functionを提案した形に分解しているが、基本は 🚫 Arrow icon of a page linkPost not found と同じ感じで証明できる。3つの式を合成して1つにするときは 1δ/31-\delta/3以上の確率で、として式変形していた。

PU Learning Revisited

biased Negativeがなくても、この手法が提案した閾値 σ^(x)>η\hat{\sigma}(\mathbf{x})>\etaの考えはPU Learningにも使える。この手法はPUbN\Nと命名されている。

Image in a image block

Negativeがないので、 s=+1,y=+1ors=+1,y=1s=+1,y=+1 \mathrm{or} s=+1,y=-1の条件分けはなくなり1つにまとまる。そして、展開した中でもNegative部分が消えている。

これは実質的に、Unlabeledのデータの選別なので、ある意味Sample-Selectionであると言える。これによって、Unlabeledが実質的なNegativeとして扱われて薄くしても、Negativeにかたよりがちなのを改善できる

実験

全部書くのは長すぎるので、大事なところだけ

使った損失関数はsigmoid loss。使ったデータセットはMNIST、CIFAR-10、20 News groups。使ったネットはConvNet、PreAct ResNet-18だそう。

比較に使ったのはnnPNUのみ。

biased Negativeのアノテーションは、 z{1,,S}z \in \lbrace 1, \cdots, S \rbraceとして、カテゴリをまず考える。各カテゴリについて、以下が成り立つ。

p(xz,y=1)=p(xz,y=1,s=+1)p(zy=1)p(zy=1,s=+1)p(\mathbf{x}|z,y=-1)=p(\mathbf{x}|z,y=-1,s=+1)\\ p(z|y=-1)\neq p(z|y=-1,s=+1)

つまり、同じカテゴリに属していれば、ラベルがついてるかどうかによってデータの生成分布は全く同じ。

これ、生成として何を意味してるんだ?実験を見ると、biased Negative=指定のカテゴリにのみ属するNegativeを生成、らしい。